﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace 登录注册功能_sqlserver
{
    public partial class BianjiKuang : Form
    {
        //设置数据库唯一标识 确定修改的数据
        string OneUsername = "";
        // 定义一个事件，用于通知父窗口刷新数据
        public event Action OnFormClosed;
        public BianjiKuang(string Nicheng,string username)
        {
            InitializeComponent();
            Bianjilabel.Text = $"编辑的内容：{Nicheng}";
            OneUsername = username;
        }

        private void BianjiKuang_Load(object sender, EventArgs e)
        {

        }
        /// <summary>
        /// 利用传进来的信息查找对应数据 并修改提交
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Bianjibutton_Click(object sender, EventArgs e)
        {
            UserTModelForEF model = new UserTModelForEF();
            using (MyDbContext mydb =new MyDbContext()) {
                model =  mydb.UserTForWinform.FirstOrDefault(X => X.Username == OneUsername);
                if (BianjitextBox.Text != "")
                {
                    model.Nicheng = BianjitextBox.Text;
                }
                else {
                    MessageBox.Show("编辑框不能为空");
                    return;
                }
                //告诉数据库上下文（mydb），这个 model 是从数据库里取出来的，但现在你手动修改了它的一些属性（比如 Nicheng），需要让数据库知道它的状态发生了变化。
                mydb.UserTForWinform.Attach(model);
                //标记这个对象为“需要更新到数据库”的状态。这样当保存时，EF（Entity Framework）就知道要生成一条 UPDATE SQL 语句去更新数据库中的对应记录。
                mydb.Entry(model).State = System.Data.Entity.EntityState.Modified;
                //执行之前做的所有操作（比如更新 Nicheng 字段），并把这些更改保存到数据库中。
                mydb.SaveChanges();
                MessageBox.Show($"{Bianjilabel.Text}成功");
            }
            // 触发关闭事件，通知父窗口刷新数据
            OnFormClosed?.Invoke();
            this.Close();
        }
    }
}
